% 生成 2^12 个等分相位
N = 2^10;
phase = linspace(0, 2*pi, N);

% 计算每个相位的正弦值
sin_values = sin(phase) + 1;

% 将正弦值缩放到 12 位范围 [0, 4095]
sin_values_scaled = round(sin_values * 2047);

% 将缩放后的值转换为 16 位有符号整数
rom_table = int16(sin_values_scaled);

% 将 ROM 表输出为 C 语言数组的形式，每行 20 个元
fid = fopen('sin_rom_table.c', 'w');
fprintf(fid, 'int16_t sin_rom_table[%d] = {\n', N);
for i = 1:N
    fprintf(fid, '%d, ', rom_table(i));
    if (mod(i, 20) == 0)
        fprintf(fid, '\n');
    end
end
fprintf(fid, '};\n');
fclose(fid);